import pandas as pd
import os


# 项目需求4：对数据进行数据处理，每个数据文件都先进行分组操作，分组后进行取中值操作。数据处理完成后按照不同类型放入多个文件，多个文件放入同一输出目录（方便上传到hdfs）。
def Statistic():
    # 源文件目录字符串差异化部分
    filelist = ["DMYS",
                "DMYS-HF",
                "H500",
                "PLAM-HF",
                "PM25",
                "PM25"
                ]
    path = "C:/Users/24350/IdeaProjects/Meteorological_BigData/initialdata"  # 源文件目录字符串公共部分
    outpath = "C:/Users/24350/IdeaProjects/Meteorological_BigData/Statistic"  # 输出目录
    os.makedirs(outpath, exist_ok=True)  # 新建输出目录
    flag = 1  # 用于读取文件夹目录
    for file in filelist:  # 遍历文件列表
        # 读文件：读取路径为源文件目录字符串公共部分加差异化部分
        df = pd.read_table(path + str(flag) + "/" + file + "-AddCity.txt", sep="\t", header=0, low_memory=False)
        # 遍历文件中的列：用于查询类型为字符串的列（源文件中除city列外，只用一行属性为object的列，所以直接在循环里赋值。如有多个列为object，应该使用列表）
        for col in df.columns:
            if str(df[col].dtype) == "object" and col != "city":
                # col获取的应该是DMYS和DMYS-HF中的方位列
                df2 = df.groupby(["city", "year", "month", "day", "hour", col]).agg("median")
            else:
                df3 = df.groupby(["city", "year", "month", "day", "hour"]).agg("median")
        # 写文件
        if flag != 6:
            try:
                df2.to_csv(outpath + "/" + file + ".txt", float_format="%.2f", mode="a+", sep="\t", header=True)
                del df2
            except:
                df3.to_csv(outpath + "/" + file + ".txt", float_format="%.2f", mode="a+", sep="\t", header=True)
                del df3
        else:
            df2.to_csv(outpath + "/" + file + "_13.txt", float_format="%.2f", mode="a+", sep="\t", header=True)
            del df2
        flag += 1


if __name__ == '__main__':
    Statistic()